package com.ordobill.webapp.engine;

/**
 * 기계의 실패시기 까지를 측정하는 메소드를 정의한 인터페이스 입니다.
 * 
 * @author Choi Jin Wook(A.K.A Brian Choi @ Ordobill Office) / choijinwook84@gmail.com
 *
 */
public interface TypeOfFailure {
    
    /**
     * Demand Load Fail Type입니다. 아직 구현되지 않았습니다.
     * @param reliability
     * @param failureTime
     * @return Hazard Rate
     */
    public float demandLoadFailType(float reliability, float failureTime);
    
    /**
     * Exponential Failt타입을정의 합니다.
     * 
     * @param failureTime 보장시간 
     * @param breakPoint 망가진 시점의 시간을 전달합니다.
     * @param reductionFactor 수리시 복구 정도를 지정합니다.
     * @param repMod Reduction Factor을 적용할지를 지정합니다.
     * @param repRepeat 수리를 무한정(Infinity:Y)할지 유한정(Up to Number:N)할지 결정합니다.
     * @param repUpto repRepeat가 N일 경우 몇번까지 Reduction Factor를 적용할지 결정합니다.
     * @return Hazard Rate
     */
    public float exponentialFailType(float failureTime, float breakPoint,float reductionFactor, String repMod, String repRepeat, int repUpto);
    
    /**
     * Normal Distribution
     *
     * @param expectedValue Mean을 입력합니다.
     * @param standardDeviation  SD를 입력합니다.
     * @param breakPoint 망가진 시점을 입력합니다.
     * @param reductionFactor 수리시 복구 정도를 지정합니다.
     * @param repMod Reduction Factor을 적용할지를 지정합니다.
     * @param repRepeat 수리를 무한정(Infinity:Y)할지 유한정(Up to Number:N)할지 결정합니다.
     * @param repUpto repRepeat가 N일 경우 몇번까지 Reduction Factor를 적용할지 결정합니다.
     * @return float MTTF(Mean Time To Failure)
     */
    public float normalFailType(float expectedValue, float standardDeviation, float breakPoint, float reductionFactor, String repMod, String repRepeat, int repUpto);
    
    /**
     * Rectangular Fail Type함수는 present가 minTTF와 maxTTF의 시점내에서 <br />1/FailMode 만큼의 HarzardRate를 만들어 냅니다.
     * 
     * @param minTtf 가장 작은 시점의 TTF를 입력합니다.
     * @param maxTtf 가장 큰 시점의 TTF를 입력합니다.
     * @param breakPoint 망가진 시점의 시간을 전달합니다.
     * @param reductionFactor 수리시 복구 정도를 지정합니다.
     * @param repMod Reduction Factor을 적용할지를 지정합니다.
     * @param repRepeat 수리를 무한정(Infinity:Y)할지 유한정(Up to Number:N)할지 결정합니다.
     * @param repUpto repRepeat가 N일 경우 몇번까지 Reduction Factor를 적용할지 결정합니다.
     * @return Hazard Rate
     */
    public float rectangularFailType(float minTtf, float maxTtf, float breakPoint, float reductionFactor, String repMod, String repRepeat, int repUpto);
    
    /**
     * Triangluar Fail Type method 입니다.
     * 
     * @param minTtf 가장 작은 시점의 TTF를 입력합니다.
     * @param maxTtf 가장 큰 시점의 TTF를 입력합니다.
     * @param mostTtf 가장 큰 시점의 TTF를 입력합니다.
     * @param breakPoint 망가진 시점의 시간을 전달합니다.
     * @param reductionFactor 수리시 복구 정도를 지정합니다.
     * @param repMod Reduction Factor을 적용할지를 지정합니다.
     * @param repRepeat 수리를 무한정(Infinity:Y)할지 유한정(Up to Number:N)할지 결정합니다.
     * @param repUpto repRepeat가 N일 경우 몇번까지 Reduction Factor를 적용할지 결정합니다.
     * @return Hazard Rate
     */
    public float triangularFailType(float minTtf, float maxTtf, float mostTtf, float breakPoint, float reductionFactor, String repMod, String repRepeat, int repUpto);
    
    /**
     * Weibull No Delay Fail Type입니다
     * 
     * @param characteristicLife 특성수명
     * @param shapeParameter 형태모수
     * @param breakPoint 망가진 시점의 시간을 전달합니다.
     * @param reductionFactor 수리시 복구 정도를 지정합니다.
     * @param repMod Reduction Factor을 적용할지를 지정합니다.
     * @param repRepeat 수리를 무한정(Infinity:Y)할지 유한정(Up to Number:N)할지 결정합니다.
     * @param repUpto repRepeat가 N일 경우 몇번까지 Reduction Factor를 적용할지 결정합니다.
     * @return Hazard Rate
     */
    public float weibullTimeNoDelayType(float characteristicLife, float shapeParameter, float breakPoint, float reductionFactor, String repMod, String repRepeat, int repUpto);
    
    /**
     * Weibull Time Delay Fiail Type입니다.
     * 
     * @param characteristicLife 특성수명
     * @param shapeParameter 형태모수
     * @param breakPoint 망가진 시점의 시간을 전달합니다.
     * @param reductionFactor 수리시 복구 정도를 지정합니다.
     * @param timeDelay
     * @param repMod Reduction Factor을 적용할지를 지정합니다.
     * @param repRepeat 수리를 무한정(Infinity:Y)할지 유한정(Up to Number:N)할지 결정합니다.
     * @param repUpto repRepeat가 N일 경우 몇번까지 Reduction Factor를 적용할지 결정합니다.
     * @return Hazard Rate
     */
    public float weibullTimeDelayType(float characteristicLife, float shapeParameter, float breakPoint, float reductionFactor , float timeDelay, String repMod, String repRepeat, int repUpto);
    
    /**
     * Weibull Age At Start-up Fail Type입니다. 아직 구현되지 않았습니다.
     * 
     * @param characteristicLife 특성수명
     * @param shapeParameter 형태모수
     * @param ageAtStartOfSim
     * @return Hazard Rate
     */
    public float weibullAgeAtStartupType(float characteristicLife, float shapeParameter, float ageAtStartOfSim, String repMod, String repRepeat, int repUpto);
    
    /**
     * Weibill Time Delay on 1st Fail Type입니다. 아직 구현되지 않았습니다.
     * 
     * @param characteristicLife 특성수명
     * @param shapeParameter 형태모수
     * @param timeDelayToStart1stFailDist
     * @return Hazard Rate
     */
    public float weibullTimeDelayOn1stFailType(float characteristicLife, float shapeParameter, float timeDelayToStart1stFailDist, String repMod, String repRepeat, int repUpto);
    
    /**
     * None Fail Type입니다. 아직구현되지 않았습니다.
     * 
     * @return Hazard Rate
     */
    public float noneFailType();
    
}
